package com.qidian.kk;

import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * @Author: KK
 * @DateTime: 2024/10/23 14:22
 **/
public class StreamDemo11 {

    public static void main(String[] args) {
        //        获取一个存放所有作者名字的List集合。
        // List<Author> authors = getAuthors();
        // List<String> nameList = authors.stream()
        //         .map(Author::getName)
        //         .collect(Collectors.toList());
        // System.out.println(nameList);
        //
        //
        //
        // // 获取一个所有书名的Set集合。
        // Set<String> collect = authors.stream()
        //         .flatMap(author -> author.getBooks().stream())
        //         .map(Book::getName)
        //         .collect(Collectors.toSet());
        // System.out.println(collect);


        // 获取一个Map集合，map的key为作者名，value为List<Book>
        Map<String, List<Book>> collect1 = getAuthors().stream()
                .distinct()
                .collect(Collectors.toMap(Author::getName, author -> author.getBooks().stream().distinct().collect(Collectors.toList())));
        System.out.println(collect1);
    }


    private static List<Author> getAuthors() {
        //数据初始化
        Author author = new Author(1L,"蒙多",33,"一个从菜刀中明悟哲理的祖安人",null);
        Author author2 = new Author(2L,"亚拉索",15,"狂风也追逐不上他的思考速度",null);
        Author author3 = new Author(3L,"易",14,"是这个世界在限制他的思维",null);
        Author author4 = new Author(3L,"易",14,"是这个世界在限制他的思维",null);

        //书籍列表
        List<Book> books1 = new ArrayList<>();
        List<Book> books2 = new ArrayList<>();
        List<Book> books3 = new ArrayList<>();

        books1.add(new Book(1L,"刀的两侧是光明与黑暗","哲学,爱情",88,"用一把刀划分了爱恨"));
        books1.add(new Book(2L,"一个人不能死在同一把刀下","个人成长,爱情",99,"讲述如何从失败中明悟真理"));

        books2.add(new Book(3L,"那风吹不到的地方","哲学",85,"带你用思维去领略世界的尽头"));
        books2.add(new Book(3L,"那风吹不到的地方","哲学",85,"带你用思维去领略世界的尽头"));
        books2.add(new Book(4L,"吹或不吹","爱情,个人传记",56,"一个哲学家的恋爱观注定很难把他所在的时代理解"));

        books3.add(new Book(5L,"你的剑就是我的剑","爱情",56,"无法想象一个武者能对他的伴侣这么的宽容"));
        books3.add(new Book(6L,"风与剑","个人传记",100,"两个哲学家灵魂和肉体的碰撞会激起怎么样的火花呢？"));
        books3.add(new Book(6L,"风与剑","个人传记",100,"两个哲学家灵魂和肉体的碰撞会激起怎么样的火花呢？"));

        author.setBooks(books1);
        author2.setBooks(books2);
        author3.setBooks(books3);
        author4.setBooks(books3);

        return new ArrayList<>(Arrays.asList(author,author2,author3,author4));
    }
}
